package com.atguigu.zerocopy;


import java.io.FileInputStream;
import java.net.InetSocketAddress;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;

public class NewIOClient {
    public static void main(String[] args) throws Exception {
        SocketChannel socketChannel = SocketChannel.open();
        socketChannel.connect(new InetSocketAddress("localhost", 7002));
        String filename = "D:\\data\\aa\\a1.mp4";

        FileChannel fileChannel = new FileInputStream(filename).getChannel();

        long startTime = System.currentTimeMillis();

        // 总共字节数
        long totalSize = fileChannel.size();

        // windows平台最大传送数据包
        long max_pkg = 8 * 1024 * 1024;

        // 本次传输到的位置
        long cur_pos = 0;

        long transSize = 0;

        // 如果剩余的字节数量 > 8M
        while (totalSize > max_pkg) {
            // 本次传输的字节数
            long tmp = fileChannel.transferTo(cur_pos, max_pkg, socketChannel);

            // 传输后剩余字节数
            totalSize -= tmp;

            // 传输到的位置
            cur_pos += tmp;

            // 已经传输的大小 用于校验
            transSize += tmp;
        }

        // 如果还有剩余,则将剩余一次性传输
        if (totalSize > 0) {
            long tmp = fileChannel.transferTo(cur_pos, totalSize, socketChannel);
            transSize += tmp;
        }

        System.out.println("发送的总的字节数=" + transSize + " 耗时=" + (System.currentTimeMillis() - startTime));

        fileChannel.close();
    }
}